#ifndef FILEBUFFER_H
#define FILEBUFFER_H

#include <QObject>
#include <QString>
#include <QLinkedList>
#include <QByteArray>
#include <QTextStream>

#include "ifilebuffer.h"

/*!
 * \brief The FileBuffer class
 * Потоконебезопасная синхронная реализация буфера файлов
 * Не использует сигналов. Для получения информации об ошибке во время последней операции использовать
 * метод getLastError()
 */
class FileBuffer : public IFileBuffer
{        

public:

    FileBuffer();

    ~FileBuffer();

    QString holdLoad();

    void loadFile(QString fName);

    QString holdSave();

    void saveFile(QString fName);

    void release();

    QString holdClear();

    void clearData();

    QString getLastError();

    IFileBuffer::State getState();

    QString getFileName();

    qint64  getFileSize();

    qint64 getBytesProcessed();

public slots:

    void trigger();

    void stop();

protected:

    virtual bool canWork();

    virtual void enableWork();

    State state;
    virtual void setState(State newState);

    QLinkedList<QByteArray> *data;

    qint64 bytesProcessed;
    virtual void setBytesProcessed(qint64 newSize);
    virtual void incBytesProcessed(qint64 incSize);

    qint64 fileSize;
    virtual void setFileSize(qint64 newSize);

    QString fName;
    virtual void setFileName(QString newFileName);

    QString errorString;
    QTextStream errorStream;
    virtual void errorReset();
    virtual QTextStream& errorBegin();
    virtual QString errorEnd();
};

#endif // FILEBUFFER_H
